-- 1、传参
local voucherId = ARGV[1]
local userId = ARGV[2]
local orderId = ARGV[3]

-- 2、库存校验和重复下单校验
-- 思想：重复使用两次以上的就新建变量, ..表示拼接字符串
local voucherKey = "seckill:stock:".. voucherId
local orderKey = "seckill:order:" .. voucherId

local stock = redis.call("get", voucherKey)
if(tonumber(stock)<=0) then
    return 1
end

if(redis.call('sismember', orderKey, userId) == 1) then
    return 2
end
-- 3、下单(扣库存，创建下单记录）
redis.call('incrby', voucherKey, -1)
redis.call('sadd', orderKey, userId)

-- 4、 向消息队列发送消息(注意这里特地将orderId转换为id，是为了与实体对应，方便后续转换！）
redis.call('xadd', 'stream.orders', '*', 'voucherId', voucherId, 'userId', userId, 'id', orderId)

return 0
